
/**
* @Title: BlockingQueueTest.java
* @Package com.leetone
* @Description: 【】
* @date 2018年9月1日 下午12:49:05
* @version V1.0
* @Company: 上海未泰信息技术有限公司
* @author:[谭磊][leetone123@163.com]
*/

package com.leetone;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

/**
* @ClassName: BlockingQueueTest
* @Description: 【阻塞队列测试实例】
* @date 2018年9月1日 下午12:49:05
* @Company: 上海未泰信息技术有限公司
* @author:[谭磊][leetone123@163.com]
*/

public class BlockingQueueTest {
	/**
	 * 
	* @Title: main
	* @Description: 【数组阻塞队列测试】
	* @date 2018年9月1日 下午1:21:31
	* @author:[谭磊][leetone123@163.com]
	* @param @param args
	* @param @throws InterruptedException    参数
	* @return void    返回类型
	* 现有的程序代码模拟产生了16个日志对象，并且需要运行16S才能打完这些日志
	* 现在程序中有4个线程去调用parseLog()方法来打印这些日志
	* 因此程序只需要运行4s就可以打印完毕这些日志
	 */
	public static void main(String[] args) throws InterruptedException {
		//新建一个等待队列
		final BlockingQueue<String> bq = new ArrayBlockingQueue<>(16);
		//新建一个链式的等待队列
		//final BlockingQueue<String> bq2 = new LinkedBlockingQueue<>(16);
		//4个线程
		for(int i=0;i<4;i++) {
			new Thread(new Runnable() {
				@Override
				public void run() {
					while(true) {
						try {
							String log = (String)bq.take();
							parseLog(log);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}
			}).start();
		}
		for(int i=0;i<16;i++) {
			String log = (i+1)+" ---> ";
			//将数据存储到队列里
			bq.put(log);
		}
	}
	private static void parseLog(String log) {
		System.out.println(log + System.currentTimeMillis());
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}
